package cn.xeblog.plugin.tools.browser.core;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 用户代理枚举
 * <p>
 * User Agent，简称UA，中文名为用户代理，是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。通过这个标识，用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计
 *
 * @author anlingyi
 * @date 2022/8/15 5:15 PM
 */
@AllArgsConstructor
public enum UserAgent {

  /**
   * 手机
   */
  IPHONE("iPhone") {
    @Override
    public String getValue() {
      return "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1";
    }
  },
  /**
   * 安卓
   */
  ANDROID("Android") {
    @Override
    public String getValue() {
      return "Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Mobile Safari/537.36";
    }
  },

  /**
   * 平板
   */
  IPAD("iPad") {
    @Override
    public String getValue() {
      return "Mozilla/5.0 (iPad; CPU OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/87.0.4280.77 Mobile/15E148 Safari/604.1";
    }
  },

  /**
   * windows 系统
   */
  WINDOWS("Windows") {
    @Override
    public String getValue() {
      return "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36";
    }
  },

  /**
   * 苹果 系统
   */
  MACOS("MacOS") {
    @Override
    public String getValue() {
      return "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36";
    }
  },

  /**
   * 当前机器
   */
  NATIVE("本机") {
    @Override
    public String getValue() {
      return null;
    }
  };

  /**
   * 名称
   */
  @Getter
  private String name;

  /**
   * 用户代理值
   *
   * @return 用户代理值
   */
  public abstract String getValue();

  /**
   * 通过名称标识获得用户代理
   *
   * @param name 名称
   * @return 用户代理
   */
  public static UserAgent getUserAgent(String name) {
    for (UserAgent userAgent : values()) {
      if (userAgent.getName().equals(name)) {
        return userAgent;
      }
    }
    return IPHONE;
  }
}
